
package com.kinth.work.webmagic.huicong;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.FilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;

/**
 * 
 * <p>
 * Title: 提取公司链接
 * </p>
 * <p>
 * Description: 1.
 * http://s.hc360.com/?w=%CE%E5%BD%F0&mychannel=enterprise，还是这个页面，不过这次是为了提取具体
 * 公司的链接。RealCompanyUrl是用来处理这个问题的。这个问题比较简单。直接提取出来即可。
 * </p>
 * 
 * @author kaikai
 * @2017年3月21日
 */
public class RealCompanyUrl implements PageProcessor,Runnable
{
	//private String industry;// 分类
	public static final int NUM_ONCE = 10;// 每次从数据库里面取出的值

	private Site site = Site.me().setUserAgent("Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803")
			.setRetryTimes(3).setSleepTime(100);

	/**
	 * 1. 提取每个公司的链接直接使用links()
	 */
	@Override
	public void process(Page page)
	{
		ArrayList<String> companyList = new ArrayList<String>();
		companyList = (ArrayList<String>) page.getHtml()
				.xpath("//body/div[@class='s-layout']" + "/div[@class='s-mod-main']/div[@class='cont-left']"
						+ "/div[@class='col']/div[@class='contbox']//h3/a")
				.links().all();
		//只用取一次即可
		String urlNow = page.getUrl().toString();
		ArrayList<String> industryList = dbUtil.queryIndustry("huicong_url2", urlNow);
		String industry = null;
		if(industryList.size() > 0)
		{
			industry = industryList.get(0);
		}
		
		for (String url : companyList)
		{
			
			UrlHuiCong urlHuiCong = new UrlHuiCong(url, industry);
			dbUtil.insertUrl(urlHuiCong, "huicong_url3");
		}
	}

	@Override
	public Site getSite()
	{
		return site;
	}

	/**
	 * 1. 起到main函数的作用。运行整个类。并把结果从到上面的静态set里面
	 */
	public static void runSpider()
	{
		System.out.println("爬取公司链接开始");
		// 从记录文件里面取出记录
		int rank = FileUtil.getCompanyUrl();
		// 取出，每次10个
		ArrayList<UrlHuiCong> urlList = dbUtil.queryUrl("huicong_url2", rank, NUM_ONCE);
		RealCompanyUrl realCompanyUrl = new RealCompanyUrl();
		Spider spider = Spider.create(realCompanyUrl);
		while (true)
		{
			if (urlList.size() == 0)
			{
				try
				{
					Thread.sleep(1000 * 10);
					System.out.println("RealCompanyUrl: 当下公司列表链接已经爬取完毕。请结合其他列表情况判断是否已经完成");
				} catch (InterruptedException e)
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}else
			{
				for (UrlHuiCong urlHuiCong : urlList)
				{
					
					String startUrlTemp = urlHuiCong.getUrl();
//					String industryTemp = urlHuiCong.getIndustry();
					//realCompanyUrl.industry = industryTemp;

					spider.addUrl(startUrlTemp).run();
				}
			}
			//为了均衡资源，这里每次睡眠10分钟
			
				//Thread.sleep(1000 * 60 * 10);
			
			int nextRank = FileUtil.getCompanyUrl() + urlList.size();
			FileUtil.writeCompanyUrl(nextRank);
			urlList = dbUtil.queryUrl("huicong_url2", nextRank, NUM_ONCE);
		}
	}

	public static void main(String[] args)
	{
		RealCompanyUrl.runSpider();
	}

	@Override
	public void run()
	{
		// TODO Auto-generated method stub
		runSpider();
	}
}